{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "zRevponfuNjk"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import tensorflow as tf\n",
        "import tensorflow.keras as K\n",
        "import matplotlib.pyplot as plt"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "KfVYClxYuNjn"
      },
      "outputs": [],
      "source": [
        "np.random.seed(11)\n",
        "tf.random.set_seed(11)\n",
        "batch_size = 256\n",
        "max_epochs = 50\n",
        "learning_rate = 1e-3\n",
        "momentum = 8e-1\n",
        "hidden_dim = 128\n",
        "original_dim = 784"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3OVhgepRuNjp",
        "outputId": "42ba5214-d251-45c4-efe3-0e5743721300"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n",
            "11493376/11490434 [==============================] - 0s 0us/step\n",
            "11501568/11490434 [==============================] - 0s 0us/step\n"
          ]
        }
      ],
      "source": [
        "(x_train, _), (x_test, _) = K.datasets.mnist.load_data()\n",
        "\n",
        "x_train = x_train / 255.\n",
        "x_test = x_test / 255.\n",
        "\n",
        "x_train = x_train.astype(np.float32)\n",
        "x_test = x_test.astype(np.float32)\n",
        "\n",
        "x_train = np.reshape(x_train, (x_train.shape[0], 784))\n",
        "x_test = np.reshape(x_test, (x_test.shape[0], 784))\n",
        "\n",
        "# Generate corrupted MNIST images by adding noise with normal dist\n",
        "# centered at 0.5 and std=0.5\n",
        "noise = np.random.normal(loc=0.5, scale=0.5, size=x_train.shape)\n",
        "x_train_noisy = x_train + noise\n",
        "noise = np.random.normal(loc=0.5, scale=0.5, size=x_test.shape)\n",
        "x_test_noisy = x_test + noise\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "0_kdk8jPuNjq"
      },
      "outputs": [],
      "source": [
        "\n",
        "class Encoder(K.layers.Layer):\n",
        "    def __init__(self, hidden_dim):\n",
        "        super(Encoder, self).__init__()\n",
        "        self.hidden_layer = K.layers.Dense(units=hidden_dim, activation=tf.nn.relu)\n",
        "        \n",
        "    \n",
        "    def call(self, input_features):\n",
        "        activation = self.hidden_layer(input_features)\n",
        "        return activation"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "rjggTNPSuNjr"
      },
      "outputs": [],
      "source": [
        "\n",
        "class Decoder(K.layers.Layer):\n",
        "    def __init__(self, hidden_dim, original_dim):\n",
        "        super(Decoder, self).__init__()\n",
        "        self.output_layer = K.layers.Dense(units=original_dim, activation=tf.nn.relu)\n",
        "  \n",
        "    def call(self, encoded):\n",
        "        activation = self.output_layer(encoded)\n",
        "        return activation "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "WomDgaDJuNjs"
      },
      "outputs": [],
      "source": [
        "class Autoencoder(K.Model):\n",
        "    def __init__(self, hidden_dim, original_dim):\n",
        "        super(Autoencoder, self).__init__()\n",
        "        self.loss = []\n",
        "        self.encoder = Encoder(hidden_dim=hidden_dim)\n",
        "        self.decoder = Decoder(hidden_dim=hidden_dim, original_dim=original_dim)\n",
        "\n",
        "    def call(self, input_features):\n",
        "        encoded = self.encoder(input_features)\n",
        "        reconstructed = self.decoder(encoded)\n",
        "        return reconstructed"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qmfvtHdmuNjt",
        "outputId": "6050e35d-e9a7-409b-f2f4-d4ac16b4975a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/50\n",
            "235/235 [==============================] - 6s 11ms/step - loss: 0.0507 - val_loss: 0.0335\n",
            "Epoch 2/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0303 - val_loss: 0.0275\n",
            "Epoch 3/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0269 - val_loss: 0.0259\n",
            "Epoch 4/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0260 - val_loss: 0.0254\n",
            "Epoch 5/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0254 - val_loss: 0.0248\n",
            "Epoch 6/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0251 - val_loss: 0.0248\n",
            "Epoch 7/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0250 - val_loss: 0.0245\n",
            "Epoch 8/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0247 - val_loss: 0.0242\n",
            "Epoch 9/50\n",
            "235/235 [==============================] - 2s 9ms/step - loss: 0.0245 - val_loss: 0.0243\n",
            "Epoch 10/50\n",
            "235/235 [==============================] - 2s 9ms/step - loss: 0.0245 - val_loss: 0.0242\n",
            "Epoch 11/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0245 - val_loss: 0.0242\n",
            "Epoch 12/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0243 - val_loss: 0.0239\n",
            "Epoch 13/50\n",
            "235/235 [==============================] - 2s 8ms/step - loss: 0.0242 - val_loss: 0.0238\n",
            "Epoch 14/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0241 - val_loss: 0.0238\n",
            "Epoch 15/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0240 - val_loss: 0.0236\n",
            "Epoch 16/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0236 - val_loss: 0.0231\n",
            "Epoch 17/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0232 - val_loss: 0.0228\n",
            "Epoch 18/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0231 - val_loss: 0.0228\n",
            "Epoch 19/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0230 - val_loss: 0.0226\n",
            "Epoch 20/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0228 - val_loss: 0.0225\n",
            "Epoch 21/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0227 - val_loss: 0.0227\n",
            "Epoch 22/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0226 - val_loss: 0.0223\n",
            "Epoch 23/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0226 - val_loss: 0.0223\n",
            "Epoch 24/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0225 - val_loss: 0.0223\n",
            "Epoch 25/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0223 - val_loss: 0.0221\n",
            "Epoch 26/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0223 - val_loss: 0.0221\n",
            "Epoch 27/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0223 - val_loss: 0.0220\n",
            "Epoch 28/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0222 - val_loss: 0.0222\n",
            "Epoch 29/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0222 - val_loss: 0.0219\n",
            "Epoch 30/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0220 - val_loss: 0.0218\n",
            "Epoch 31/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0219 - val_loss: 0.0217\n",
            "Epoch 32/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0219 - val_loss: 0.0216\n",
            "Epoch 33/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0218 - val_loss: 0.0216\n",
            "Epoch 34/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0217 - val_loss: 0.0215\n",
            "Epoch 35/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0216 - val_loss: 0.0215\n",
            "Epoch 36/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0216 - val_loss: 0.0215\n",
            "Epoch 37/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0216 - val_loss: 0.0214\n",
            "Epoch 38/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0215 - val_loss: 0.0213\n",
            "Epoch 39/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0215 - val_loss: 0.0215\n",
            "Epoch 40/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0214 - val_loss: 0.0213\n",
            "Epoch 41/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0214 - val_loss: 0.0212\n",
            "Epoch 42/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0213 - val_loss: 0.0211\n",
            "Epoch 43/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0211\n",
            "Epoch 44/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0210\n",
            "Epoch 45/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0212\n",
            "Epoch 46/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0210\n",
            "Epoch 47/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0211\n",
            "Epoch 48/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0211\n",
            "Epoch 49/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0210\n",
            "Epoch 50/50\n",
            "235/235 [==============================] - 1s 5ms/step - loss: 0.0212 - val_loss: 0.0210\n"
          ]
        }
      ],
      "source": [
        "model = Autoencoder(hidden_dim=hidden_dim, original_dim=original_dim)\n",
        "\n",
        "model.compile(loss='mse', optimizer='adam')\n",
        "\n",
        "loss = model.fit(x_train_noisy,\n",
        "                x_train,\n",
        "                validation_data=(x_test_noisy, x_test),\n",
        "                epochs=max_epochs,\n",
        "                batch_size=batch_size)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 279
        },
        "id": "mIjf0JS2uNju",
        "outputId": "e2b8ed55-d633-4a29-b87e-1d80a353d045"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "source": [
        "\n",
        "plt.plot(range(max_epochs), loss.history['loss'])\n",
        "plt.xlabel('Epochs')\n",
        "plt.ylabel('Loss')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 248
        },
        "id": "jsVKWntguNjv",
        "outputId": "825fc1b8-9358-40fb-b7c9-01f08d2df835"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABG0AAADnCAYAAACkCqtqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9Z6BdVbX+/SQ5yUlMYiiKFQtWULEjCgoiIkUQKdK7ggooigICdpSrKFUUKQJSQ0dBQBGp6rVcbEi1FxBBCaST5Lwf7rtnfuM55W/cG90Xn9+nkax19l5rljHnWns8Y4wbGhpSCCGEEEIIIYQQQugvxv+7LyCEEEIIIYQQQgghDCcvbUIIIYQQQgghhBD6kLy0CSGEEEIIIYQQQuhD8tImhBBCCCGEEEIIoQ/JS5sQQgghhBBCCCGEPiQvbUIIIYQQQgghhBD6kIFlOXnq1KlDyy23nCTpgQceKMcmT57c7ClTppRjs2bNavbg4GCzJ06cWM6bO3fuiOdJ0sDA0kudN2/eiN/rfzd79uxmjx9f308tWrSo2dOnTy/HRvs7v6/FixeP+HlSbZ+VVlqp2ffee2857zGPeUyzFy5cWI5NmjRJ0v+2y4IFC8apB0yePHlo2rRpkmqb+rX86U9/Ksee+MQnjnidft8PP/wwv6sc47lj3TePsS98vIwbt7RJ/DN4bP78+c32PuSYmzBhQjnWaX//fG83jgO/xiVLljT7vvvuu29oaOjx6gFTp04dWn755SUN7wO2WWe+dhgaGmo2/87nB8+jLdU+fuxjHzvqeYTzwcfFggULRr3e+++/v9md+5WqD5Bqf3sf8NypU6c2m/0r1bHAa5KW9vlDDz2kefPm9WQuTpgwYajzubwuqY433rdf21g+k+OZ7SPVPmR7ed/wPNodH9Lhb3/726ifMdrc8XHr84pwHnE+z5gxo5zHueg+ge1x//3392wuDgwMDHXa8BnPeEY5xnHv9zta33nbcg74/c6ZM2fEz/Dvok/lfPA2p+8Y67t4jT7v+d0+TwnHk6/B7G/32Q8++KCk/x0HCxcu7MlcnD59+tCKK64oafgazXbwNWK0Mcu+dbx/O/cjVZ/k7Urf+Oc//7nZj398HcZjrYuj9SH/X6o+4aGHHirH6PP5+WP5f/e1PPeee+7p2Vx8zGMeM9TpL58D9LF+rRynnAPeV/QvHL///3ePeJ5/F9uW48fbmfOZny1Jf/3rX5tNf/u4xz2unMf+4TVJ9Z5pP/nJTy7nsT38GjttOmvWLM2dO7cnc3G55ZYbetKTniRp+D6UvsDnIvubbce2kmob+fzlOkY6vmGk89ifPiY4fujT/N/8O98D8fnJ13G2Aeewjzleh38G93533313z+bi4OBge9bw+c/79WvlPfHYWHuTseY6j/kcoO9lu3OP4d/l18HrZTuz36Q61rwPeC79q18vv/vvf//7iJ/f6+fFztrs45d96v3L9htrfrDt/F7Z9zzmc5afz+vwfQPnrO+VR7tev6ax/D/vhZ/vfT3as6lU73m058Vlemmz3HLL6Z3vfKck6ZJLLinHVltttWa/6EUvKscuv/zyZq+yyirN7jjmDv/zP//T7Gc/+9nlGB3tT3/602Y///nPL+fx82+66aZm+6bwvvvua/a6665bjl133XUj/t0LXvCCch4nmjt7ts/ee+/d7OOPP76c99KXvrTZv/vd78qxZz7zmZKkb3/72+oV06ZN02abbSZp+GaP13LggQeWYwcddFCz//CHPzTbN7j896qrrlqOcfHkd/3xj38s5734xS9u9ve+971m8+WXVCcGr0mqE+iOO+5oNsepVMecL5ZPf/rTm82+WWGFFcp5dPw+prkZOumkk2oHd8Hyyy/fxpW/QL3++uub/da3vrUc4wM/+8M3hXRO7ri4kdpggw2a7Q8IdECXXXZZs5/znOeU89i2b3nLW8qx008/vdlbbrlls+kDpOqsvQ9++ctfNvvlL395s5/2tKeV8zgWfC52XpxccMEF6hUDAwPtWl/96leXY7///e+bvfXWW5djHM8/+9nPmt3xFx3Getj8y1/+0uwnPOEJzfb5wYfDe+65p9l+veedd16z3Sf/9re/bTY3v/TBUvXxfr2cY3feeWez3/zmN5fz6JPZhlLdDJ166qk9m4sTJ05s69XJJ59cjl188cXN9jWCY5gve9Zee+1y3le/+tVmb7zxxuXYD3/4w2bTX7lPWH311Zt96623Ntsf8rhmcm5L0o9//ONms/99w8z7/MlPflKOccPFsbXOOuuU87iZ8XXkmmuukST993//t3rFiiuuqEMPPVTS8DV6ww03bDbHkFTnDvnRj3406ne99rWvLf/+1re+1eynPOUpzXa/S1/+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\n",
            "text/plain": [
              "<Figure size 1440x288 with 20 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "source": [
        "number = 10  # how many digits we will display\n",
        "plt.figure(figsize=(20, 4))\n",
        "for index in range(number):\n",
        "    # display original\n",
        "    ax = plt.subplot(2, number, index + 1)\n",
        "    plt.imshow(x_test_noisy[index].reshape(28, 28), cmap='gray')\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "\n",
        "    # display reconstruction\n",
        "    ax = plt.subplot(2, number, index + 1 + number)\n",
        "    plt.imshow(model(x_test_noisy)[index].numpy().reshape(28, 28), cmap='gray')\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "0p1zT0q8uNjx"
      },
      "outputs": [],
      "source": [
        ""
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    },
    "colab": {
      "name": "DenoisingAutoencoder.ipynb",
      "provenance": []
    },
    "accelerator": "GPU"
  },
  "nbformat": 4,
  "nbformat_minor": 0
}